package com.dc.refactoring._3_重新组织数据._13_ReplaceTypeCodeWithStateStrategy.step1;

/**
 * Description: 雇员类
 *
 * 假设这是一家激情四溢，积极进取的公司，表现出色的工程师可以晋升为经理，
 * 因此类型码是可变的，所以不能使用继承方式类处理类型码
 *
 * @author: gdc
 * @date: 2020/12/4
 * @version 1.0
 */
public class Employee {

    /**
     * 雇员类型
     */
    private int type;

    /**
     * 工程师
     */
    public static final int ENGINEER = 0;
    /**
     * 推销员
     */
    public static final int SALESMAN = 1;
    /**
     * 经理
     */
    public static final int MANAGER = 2;

    public Employee(int type) {
        this.type = type;
    }

    /**
     * 月工资
     */
    private double monthlySalary;
    /**
     * 佣金
     */
    private double commission;
    /**
     * 奖金
     */
    private double bonus;

    /**
     * 通过类型码获取薪资信息
     * @return      薪资信息
     */
    double payAmount(){
        switch (type) {
            case ENGINEER:
                return monthlySalary;
            case SALESMAN:
                return monthlySalary + commission;
            case MANAGER:
                return monthlySalary + bonus;
            default:
                throw new RuntimeException("Incorrect Employee");
        }
    }
}
